#ifndef LIST_H_
#define LIST_H_

#include <stdio.h>
#include <stdlib.h>
#include <assert.h>

typedef int LTDataType;
typedef struct List
{
    LTDataType val;    //数据域
    struct List *next; //后驱指针域
    struct List *prev; //前驱指针域
} ListNode;

ListNode *BuyListNode(LTDataType x);               //创建新节点
ListNode *ListInit();                              //创建哨兵位头节点
void ListPrint(ListNode *phead);                   //显示链表数据
void ListPushBack(ListNode *phead, LTDataType x);  //尾插
void ListPopBack(ListNode *phead);                 //尾删
void ListPushFront(ListNode *phead, LTDataType x); //头插
void ListPopFront(ListNode *phead);                //头删
ListNode *ListFind(ListNode *phead, LTDataType X); //查找值为x的节点
void ListInsert(ListNode *pos, LTDataType x);      //在pos节点前插入新的节点
void ListErase(ListNode *pos);                     //删除pos位置的节点
void ListDestory(ListNode *head);                  //释放链表

#endif